const bodyparser = require('koa-bodyparser')
const compress = require('koa-compress')
const path = require('path')

const authMid = require('./auth')

module.exports = (app) => {
  // 支持JSON、FORM提交
  app.use(bodyparser({ enableTypes: ['json', 'form', 'text'] }))

  // 过滤违禁后缀
  app.use(authMid())

  // 静态资源
  app.use(require('koa-static')(path.join(__dirname, '../../public')))

  // 页面压缩
  const options = {
    filter: function (content_type) {
      // 只有在请求的content-type中有gzip类型，我们才会考虑压缩，因为zlib是压缩成gzip类型的
      return /text/i.test(content_type)
    },
    threshold: 1024, // 阀值，当数据超过1kb的时候，可以压缩
    flush: require('zlib').Z_SYNC_FLUSH // zlib是node的压缩模块
  }
  app.use(compress(options))

  // 增加错误的监听处理
  app.on('error', (ctx, error) => {
    ctx.status = 500
    console.error(error.message)
  })
}
